Skip to main content

How Recommendations Are Calculated

This page explains every formula Smart Reorder uses, with worked examples, so you can check any number on the page by hand. The settings mentioned (lead time, order cycle, safety stock...) are described in Set up Smart Reorder.

The terms​

TermMeaning
Sales speed (Avg/day)Average units sold per day while the product was in stock
Lead timeDays from ordering to receiving
Order cycleDays between two orders to the same supplier
Safety stockExtra units to cover surprises = sales speed × safety stock days
Reorder pointThe stock level at which you should order
Target stockThe stock level an order should bring you up to
AvailableOn hand + incoming

1. Sales speed​

For each period of 30, 60 and 90 days, the app divides the units sold by the number of days the product was in stock:

speed (period) = units sold in the period ÷ (days in the period − days out of stock)

Days out of stock are left out so that a product that ran out doesn't look like a slow seller. To keep the result stable, the divider is never less than 7 days.

With the default Weighted method, the three periods are combined, giving recent sales the most weight:

sales speed = 50% × speed (30 days) + 30% × speed (60 days) + 20% × speed (90 days)

If you pick Last 30 days, Last 60 days or Last 90 days in Settings, only that period is used.

Example: a steady seller. Sold 60 / 120 / 180 units in the last 30 / 60 / 90 days, never out of stock.

  • speed (30) = 60 ÷ 30 = 2.0, speed (60) = 120 ÷ 60 = 2.0, speed (90) = 180 ÷ 90 = 2.0
  • sales speed = 0.5 × 2.0 + 0.3 × 2.0 + 0.2 × 2.0 = 2.0 per day

Example: a product picking up. Sold 60 / 90 / 105 units.

  • speed (30) = 2.0, speed (60) = 1.5, speed (90) = 1.17
  • sales speed = 1.0 + 0.45 + 0.23 = 1.68 per day. The last month counts the most, so the result is closer to 2.0 than a plain 90-day average (1.17) would be.

Example: a product that ran out. Sold 30 units in the last 30 days, but was out of stock for 10 of them.

  • speed (30) = 30 ÷ (30 − 10) = 1.5 per day, not 1.0. It sold 1.5 a day whenever it was available.
note

A day counts as "out of stock" when the nightly stock snapshot was 0 or less and nothing sold that day. The app starts taking snapshots when Smart Reorder is turned on for your shop, so stock-outs before that aren't known.

2. Safety stock, reorder point, target stock​

safety stock  = sales speed × safety stock days
reorder point = sales speed × lead time + safety stock (at least your min stock)
target stock = sales speed × (lead time + order cycle) + safety stock
then capped at your max stock, and never below the reorder point

The reorder point covers sales while you wait for the delivery, plus a cushion. The target stock also covers sales until the next order arrives, one order cycle later.

Example (sales speed 2.0/day, lead time 14 days, order cycle 30 days, safety stock 7 days):

  • safety stock = 2 × 7 = 14
  • reorder point = 2 × 14 + 14 = 42
  • target stock = 2 × (14 + 30) + 14 = 102

With a max stock of 80, the target stock becomes 80. With a min stock of 120, both the reorder point and the target stock become 120.

No recent sales but a min stock is set: the target stock is your max stock (or your min stock if you have no max), so these products are still topped up.

3. Status​

The app checks these rules in order and uses the first one that matches:

#RuleStatus
1No sales speed, and available is below min stockRecommended
1bNo sales speed otherwiseNo sales
2Available ÷ sales speed ≤ lead time (stock runs out before an order placed today arrives)Need to order
3Available ≤ reorder pointRecommended
4On hand ÷ sales speed > overstock thresholdOverstock
5Anything elseHealthy

Example (sales speed 2.0, lead time 14, reorder point 42):

  • On hand 20, incoming 0: 20 ÷ 2 = 10 days ≤ 14, so Need to order.
  • On hand 30, incoming 0: 15 days > 14, but 30 ≤ 42, so Recommended.
  • On hand 30, incoming 20: 50 > 42, so Healthy.
  • On hand 300: 150 days > 120, so Overstock.

Only for Need to order and Recommended:

quantity = target stock − on hand − incoming
rounded up to a whole number of packs (pack size)
then raised to the MOQ if lower
then rounded up to a whole unit

Example (target stock 102, on hand 30, incoming 0):

  • 102 − 30 − 0 = 72
  • pack size 10: 72 → 80 (8 packs)
  • MOQ 100: 80 → 100

5. Days of stock and stock-out date​

days of stock  = on hand ÷ sales speed
stock-out date = today + days of stock (rounded down)

Incoming stock isn't included here, because you can't sell it until it arrives. With 30 on hand at 2.0 a day: 15 days.

6. Revenue at risk​

The sales you could lose if you order today, because the goods arrive after you run out:

revenue at risk = sales speed × days without stock before the delivery × selling price
days without stock before the delivery = lead time − (available ÷ sales speed), never below 0

Example (sales speed 2.0, lead time 14, on hand 20, incoming 0, price 25.00):

  • stock lasts 20 ÷ 2 = 10 days, the delivery takes 14 days: 4 days without stock
  • revenue at risk = 2 × 4 × 25.00 = 200.00

A product with stock lasting longer than the lead time has no revenue at risk. The What happens if I don't order? section of the Why? window then tells you how many days you have left to order: (available ÷ sales speed) − lead time.

estimated cost       = recommended quantity × unit cost
recommended purchase = sum of the estimated costs of Need to order and Recommended products, per currency

8. Sales trend​

trend = (sold in the last 30 days − sold in the 30 days before) ÷ sold in the 30 days before

Sold 60 in the last 30 days and 100 in the last 60 days: the 30 days before sold 40, so the trend is (60 − 40) ÷ 40 = +50%. The Why? window mentions the trend when it's 10% or more either way.

9. Supplier, lead time and unit cost​

Supplier, when a product has several:

  1. The only supplier, if there's just one.
  2. Otherwise, the supplier of your most recent purchase order for this product.
  3. Otherwise, the supplier with the lowest price for this product.
  4. Otherwise (no PO history and no prices), the first supplier. Add prices to let the app choose.

Lead time: the supplier's lead time, otherwise the shop default. Order cycle: the supplier's order cycle, otherwise the shop default.

Unit cost: the supplier's price for the product, in the supplier's currency. Otherwise the product's cost in Shopify, only when the supplier uses your shop currency. Otherwise none ("—").

10. Sales speed from a custom period​

When you pick a Custom period (see Sales period and planning days), the sales speed of section 1 is replaced by:

sales speed = units sold in the period ÷ (days in the period − days out of stock in the period) × (1 + adjustment %)
  • Both the start and end day are included, in your store's time zone.
  • As in section 1, the divider is never less than 7 days.
  • Days out of stock are only known from the day the app started taking stock snapshots. For days before that, nothing is left out.

Example (period Nov 1 to Dec 31 = 61 days, adjustment +10%). A product sold 110 units in the period and was out of stock 6 days.

  • 110 ÷ (61 − 6) = 2.0 per day
  • × 1.10 = 2.2 per day

Special cases, in this order:

ProductSales speed usedShown as
First sale after the period ended (not on sale yet)Its recent sales speed (section 1), without the adjustmentNot sold in that period, recent sales used
First sale during the periodCounted from the first sale day only: units sold ÷ (days from the first sale to the end − days out of stock) × (1 + adjustment %)Normal
Sold nothing in the period, but at least 3 units in the last 90 days0 from the period (usually No sales); the quantity it would get with recent sales is shown as a hintNo sales in that period · sells x/day now, listed under Check: no sales in period
Anything elseThe formula aboveNormal

Example: first sale during the period. Same period, first sale on Dec 2, 60 units sold by Dec 31, never out of stock: 60 ÷ 30 = 2.0 per day.

For comparison, the app also calculates every product with its recent sales speed. That's the Recent sales: x/day line in the Avg/day column, and the line With recent sales instead: … under the summary cards.

The rest of the calculation (safety stock, reorder point, target stock, status, quantity) is the same as in sections 2 to 7, using this sales speed.

11. Planning for the next X days​

When you choose Order enough stock for: The next X days, the target stock covers X days from today instead of the lead time + order cycle:

safety stock = sales speed × safety stock days                 (as before)
target stock = sales speed × X + safety stock
then capped at your max stock, and never below your min stock

Unlike the default mode, the target stock isn't raised to the reorder point: your plan decides how much stock you want.

Status in this mode, checked in order:

#RuleStatus
1No sales speed: as in section 3 (Recommended below min stock, otherwise No sales)Recommended / No sales
2Available is below the target stock and runs out within the lead time (or within X days if X is shorter)Need to order
3Available is below the target stockRecommended
4On hand ÷ sales speed > overstock threshold (or X, if X is longer)Overstock
5Anything elseHealthy

Recommended quantity: target stock − on hand − incoming, rounded to pack size and MOQ as in section 4.

Revenue at risk only counts days without stock within your plan: lead time, or X if X is shorter.

Example (sales speed 5/day, safety stock 7 days, on hand 100, incoming 0, X = 60):

  • safety stock = 5 × 7 = 35
  • target stock = 5 × 60 + 35 = 335
  • 100 < 335 → Recommended, quantity 335 − 100 = 235

With the default mode (lead time 10, order cycle 14), the same product has a target of 5 × 24 + 35 = 155 and a reorder point of 85, so it's Healthy.

Max stock lower than the plan. With a max stock of 100, the target stock is 100. The Status column then shows Stock limit: ~13 of 60 days:

days covered = (target stock − safety stock) ÷ sales speed = (100 − 35) ÷ 5 = 13

Min stock higher than max stock. The min stock wins: with min 400 and max 300, the target stock is 400.

Lead time of X days or more. Goods ordered today arrive after the plan ends: the Lead time column shows Arrives after your X-day plan.

MOQ or pack size above max stock. The target never goes above max stock, but rounding up to the MOQ or pack size can. The Why? window then says Rounded up to the supplier's minimum order or pack size, so stock after this order (…) will be above your max stock (…).

You can combine both options: a custom period gives the sales speed, and X gives the number of days it must cover.